package fr.bludwarf.skywarrior.joueur;

import fr.bludwarf.skywarrior.global.EffetsSurIle;
import fr.bludwarf.skywarrior.global.ElementNomme;
import fr.bludwarf.skywarrior.global.Temps;
import fr.bludwarf.skywarrior.ile.StatsCombat;
import fr.bludwarf.skywarrior.utils.Reflect;

public class Techno implements EffetsSurIle, ElementNomme, EffetsSurTempsDeRecherche
{
	
	public static final Techno Parachute = new Techno("Parachute", "4h 30m"); // TODO
	public static final Techno Tissu_fortifié = new Techno("Tissu fortifié", "3h"); // TODO
	public static final Techno Boucliers_latéraux = new Techno("Boucliers latéraux", "4h 30m"); // TODO
	public static final Techno Service_militaire = new Techno("Service militaire", "3h")
	{
		public void appliquerEffetsSurIle(StatsCombat stats)
		{
			stats.add(new StatsCombat(0, 1, 1));
		};
	};
	public static final Techno Double_hélice = new Techno("Double hélice", "3h"); // TODO
	public static final Techno Poudre_à_canon = new Techno("Poudre à canon", "4h 30m");
	public static final Techno Napalmiel = new Techno("Napalmiel", "17h 30m"); // TODO
	public static final Techno Engrais_éthéré = new Techno("Engrais éthéré", "9h"); // TODO
	public static final Techno Tracteur = new Techno("Tracteur", "21h"); // TODO
	public static final Techno Communication = new Techno("Communication", "9h"); // TODO
	public static final Techno Géologie = new Techno("Géologie", "9h"); // TODO
	public static final Techno Éthéroduc = new Techno("Éthéroduc", "9h"); // TODO
	public static final Techno Cheminée_impériale = new Techno("Cheminée impériale", "9h")
	{
		public void appliquerEffetsSurIle(Ressources res)
		{
			res.add(new Ressources(3, -1, 0), false);
		};
	};
	
	public static final Reflect<Techno> REFLECT = new Reflect<Techno>(Techno.class);
	
	private String _nom;
	private double _tempsRecherche;
	
	public Techno(final String nom, final double tempsRecherche)
	{
		_nom = nom;
		_tempsRecherche = tempsRecherche;
	}
	
	public Techno(final String nom, final String tempsRecherche)
	{
		this(nom, Temps.parseDuree(tempsRecherche));
	}

	public void appliquerEffetsSurIle(StatsCombat stats)
	{
		// à implémenter pour chaque techo le cas échant
	}

	public void appliquerEffetsSurIle(Ressources res)
	{
		// à implémenter pour chaque techo le cas échant
	}
	
	public static Techno getTechno(final String nom)
	{
		return REFLECT.getDeclaredField(nom);
	}
	
	public String getNom()
	{
		return _nom;
	}
	
	public double getTempsRecherche()
	{
		return _tempsRecherche;
	}

	/* (non-Javadoc)
	 * @see fr.bludwarf.skywarrior.joueur.EffetsSurTempsDeRecherche#appliquerEffetsSurTempsDeRecherche(double)
	 */
	public double appliquerEffetsSurTempsDeRecherche(double temps)
	{
		// à implémenter pour chaque techo le cas échant
		return temps;
	}
	
}
